package com.example.dw.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.dw.dto.*;
// import com.example.dw.entity.AboutMe;
import com.example.dw.entity.Pack;
import com.example.dw.entity.User;
import com.example.dw.vo.UserVO;

import java.util.List;
import java.util.Map;

/**
 * 用户服务接口
 * @author system
 * @since 2024-01-01
 */
public interface UserService extends IService<User> {

    /**
     * 用户注册
     */
    void register(UserRegisterDTO registerDTO);

    /**
     * 用户登录
     */
    Map<String, Object> login(UserLoginDTO loginDTO);

    /**
     * 验证码登录
     */
    Map<String, Object> codeLogin(CodeLoginDTO codeLoginDTO);

    /**
     * 微信登录
     */
    Map<String, Object> wechatLogin(String code);

    /**
     * 获取用户信息
     */
    UserVO getUserInfo(Integer userid);

    /**
     * 更新用户信息
     */
    void updateUserInfo(Integer userid, UpdateUserInfoDTO updateUserInfoDTO);

    /**
     * 修改密码
     */
    void updatePassword(Integer userid, String oldPassword, String newPassword);

    /**
     * 用户签到
     */
    void sign(Integer userid);

    /**
     * 今日签到状态
     */
    Boolean signStatus(Integer userid);

    /**
     * 获取教师列表
     */
    List<UserVO> getTeacherList();

    /**
     * 分页获取教师列表
     */
    Map<String, Object> getTeacherListPage(Integer page, Integer size);

    /**
     * 绑定手机号
     */
    void bindPhone(Integer userid, String phone, String code);

    /**
     * 获取关于我们信息
     * @return AboutMe
     */
    // AboutMe getAboutMe();

    /**
     * 获取用户协议
     */
    Pack getPack();

    /**
     * 绑定微信
     */
    void bindWechat(Integer userid, String code);

    /**
     * 获取用户打卡记录
     */
    Map<String, Object> getSignRecord(Integer userid, Integer page, Integer size);

    /**
     * 生成登录二维码
     */
    String generateLoginQR();

    /**
     * 检查二维码状态
     */
    Map<String, Object> checkLoginStatus(String qrToken);

    /**
     * 绑定扫码token
     */
    void bindScanToken(Integer userid, String qrToken);

    /**
     * 已扫码确认
     */
    void confirmScan(Integer userid, String qrToken);
} 